package com.cnap.model.exception.handler;

import com.cnap.model.common.CommonResult;
import com.cnap.model.exception.JsonException;
import org.springframework.validation.BindException;
import org.springframework.validation.ObjectError;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

/**
 * 统一异常处理
 *
 * @author xc
 **/
@RestControllerAdvice
public class CnapExceptionHandler {

    /**
     * 统一 json 异常处理
     *
     * @param exception JsonException
     * @return 统一返回 json 格式
     */
    @ExceptionHandler(value = JsonException.class)
    public CommonResult<String> jsonErrorHandler(JsonException exception) {
        return CommonResult.failed(exception.getCode(), exception.getMessage());
    }

    /**
     * 统一校验异常处理
     *
     * @param e 异常
     * @return 统一返回
     */
    @ExceptionHandler({BindException.class})
    public CommonResult<String> validateErrorHandler(BindException e) {
        // 取第一个
        ObjectError objectError = e.getBindingResult().getAllErrors().get(0);
        return CommonResult.validateFailed(objectError.getDefaultMessage());
    }

}
